<script type="text/javascript">
	//浅拷贝
	var obj = {
		name : 'asd',
		sex : 'male',
		age : '12'
	}

	var obj1 = {};

	function clone(origin,target) {
		var target = target || {};
		for(var prop in origin){//遍历
			target[prop] = origin[prop];
		}
		return target;
	}

	clone(obj,obj1);

</script>

//深度拷贝
遍历对象 for(prop in obj)
1.判断是不是原始值  typeof()	 object 	
2.判断是数组还是对象  instanceof (子域是否是父域的instanceof	false  [] instanceof Array false 正常来讲是true)		toString
3.建立相应的数组或对象
递归

<script type="text/javascript">

	var obj = {
		name : 'asd',
		age : 12,
		card : ['visa','master'],
		wife : {
			name : 'cvb',
			son : {
				name : 'sdf'
			}
		}
	}

	var obj1 = {}

	function deepclone(origin,target) {
		var target = target || {},//容错
			toStr = object.prototype.toString,
			arrStr = "[object Array]";//数组

		for (var prop in origin){//遍历对象
			if(origin.hasOwnProperty(prop)){//避免原型链上的属性
				if(origin[prop] !== 'null' && typeof(origin[prop]) == 'object'){//判断属性是否是对象,origin[prop]绝对不等于 Null并且origin[prop]是对象类型
					//判断数组或对象
					if(toStr.call(origin[prop]) == arrStr){
						target[prop] = [];//建立数组
					}else{
						target[prop] = {};//建立对象
					}
					//可简写成三步运算符
					//target[prop] = (toStr.call(origin[prop]) == arrStr) ? [] : {};
					deepclone(origin[prop],target[prop]);//递归
				}else{
					target[prop] = origin[prop];//是原始值
				}
			}
		}
		return target;//没传target，返回target
	}
</script>

//条件判断？ 是 ： 否 并且返回值
var num = 1 < 0 ？ 2 + 2 ： 1 + 1;
<script type="text/javascript">
	var num = 1 > 0 ? ('10' > '9' ? 1 : 0) : 2;//先判断括号内，比较'10'和'9'大小，1和0在ASC码中都比9小，返回0，判断1 > 0 ,是返回0
	console.log(num);
</script>
